package com.example.daibanshiwu.Service.Impl;

import com.example.daibanshiwu.Service.HomeService;
import com.example.daibanshiwu.mapper.HomeMapper;
import com.example.daibanshiwu.pojo.FileDTO;
import com.example.daibanshiwu.pojo.Message;
import com.example.daibanshiwu.pojo.excelFileDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.MimeTypeUtils;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;

@Service
public class HomeServiceImpl implements HomeService {

    @Autowired
    private HomeMapper homeMapper;

    @Override
    public List<Message> getMessagesForUser(Integer userId) {
        // 业务逻辑简化为一步调用
        // 直接调用合并后的 Mapper 方法
        return homeMapper.findMessagesByUserId(userId);
    }

    /**
     * 【新增实现】
     */
    @Override
    public List<Message> getUrgentMessagesForUser(Integer userId) {
        // 调用新增的 Mapper 方法
        return homeMapper.findUrgentMessagesByUserId(userId);
    }

    @Override
   public List<Message> getTeachingAffairsMessagesForUser(Integer userId){
        return homeMapper.findTeachingAffairsMessagesByUserId(userId);
    }

    @Override
    public List<Message> getResearchAffairsMessagesForUser(Integer userId){
        return homeMapper.findResearchAffairsMessagesByUserId(userId);
    }

    @Override
    public List<Message> getAcademicCompetitionForUser(Integer userId){
        return homeMapper.findAcademicCompetitionMessagesByUserId(userId);
    }

    @Override
    public List<Message> getLearningTrainingForUser(Integer userId){
        return homeMapper.findLearningTrainingMessagesByUserId(userId);
    }

    /**
     * 【新增实现】
     */
    @Override
    public void markMessageAsHandled(int messageId, String newStatus) {
        int updatedRows = homeMapper.updateMessageStatus(messageId, newStatus);
        if (updatedRows == 0) {
            // 如果没有行被更新，可能意味着该ID不存在，可以根据业务需求选择抛出异常
            // throw new RuntimeException("更新失败：未找到ID为 " + messageId + " 的事务。");
            // 或者静默处理
            System.out.println("警告: 未找到ID为 " + messageId + " 的事务，无法更新状态。");
        }
    }

    @Override
    public excelFileDTO getFileExcelFileByMessageId(String messageId) {
        excelFileDTO excelfileDTO = homeMapper.findExcelFileByMessageId(messageId);

        // 如果数据库没有存 contentType，在这里进行补救
        if (excelfileDTO != null && excelfileDTO.getContentType() == null) {
            // 使用 Spring 的工具类根据文件名猜测 MIME 类型
            String contentType = MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE; // 默认是二进制流
            try {
                Path path = new File(excelfileDTO.getExcelName()).toPath();
                contentType = Files.probeContentType(path);
            } catch (IOException e) {
                // 忽略异常，使用默认值
                System.err.println("无法检测文件类型: " + e.getMessage());
            }
            excelfileDTO.setContentType(contentType);
        }

        return excelfileDTO;
    }
}
